home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / adasmall / eatchaos.ada < prev    next >
Text File  |  1996-01-30  |  5KB  |  201 lines

  1. with  SMALL_SP;
  2. use  SMALL_SP;
  3. procedure EAT is
  4.  
  5.     task DIJKSTRA is
  6.       entry GIVE_BIRTH;
  7.     end DIJKSTRA;
  8.  
  9.     task LISKOV is
  10.       entry GIVE_BIRTH;
  11.     end LISKOV;
  12.  
  13.     task SAMMET is
  14.       entry GIVE_BIRTH;
  15.     end SAMMET;
  16.  
  17.     task GEHANI is
  18.       entry GIVE_BIRTH;
  19.     end GEHANI;
  20.  
  21.     task CHOPSTICK1 is
  22.       entry PICKUP;
  23.       entry PUTDOWN;
  24.     end CHOPSTICK1;
  25.  
  26.     task CHOPSTICK2 is
  27.       entry PICKUP;
  28.       entry PUTDOWN;
  29.     end CHOPSTICK2;
  30.  
  31.     task CHOPSTICK3 is
  32.       entry PICKUP;
  33.       entry PUTDOWN;
  34.     end CHOPSTICK3;
  35.  
  36.     task CHOPSTICK4 is
  37.       entry PICKUP;
  38.       entry PUTDOWN;
  39.     end CHOPSTICK4;
  40.  
  41.   NO_MEALS : integer := 5;
  42.  
  43.     task body DIJKSTRA is
  44.        LENGTH_OF_MEAL: FLOAT;
  45.     begin
  46.         accept GIVE_BIRTH do
  47.           PUT("Eddy Dijkstra living and breathing");
  48.           NEW_LINE;
  49.         end GIVE_BIRTH;
  50.       for x in 1..NO_MEALS loop
  51.         CHOPSTICK1.PICKUP;
  52.         CHOPSTICK2.PICKUP;
  53.         LENGTH_OF_MEAL := RANDOM(9) + 1;
  54.         PUT("Eddy Dijkstra eating meal"); PUT(x:2);
  55.         PUT(" with chopsticks 1 and 2");
  56.         PUT(" for"); PUT(LENGTH_OF_MEAL:2:0); PUT(" seconds");
  57.         NEW_LINE;
  58.         delay LENGTH_OF_MEAL;
  59.         PUT("Eddy Dijkstra done");
  60.         NEW_LINE;
  61.         CHOPSTICK1.PUTDOWN;
  62.         CHOPSTICK2.PUTDOWN;
  63.         delay 5.0;
  64.       end loop;
  65.       PUT("Eddy Dijkstra burp");
  66.       NEW_LINE;
  67.     end DIJKSTRA;
  68.  
  69.     task body LISKOV is
  70.         LENGTH_OF_MEAL: FLOAT;
  71.     begin
  72.         accept GIVE_BIRTH do
  73.           PUT(" Barbie Liskov living and breathing");
  74.           NEW_LINE;
  75.         end GIVE_BIRTH;
  76.       for x in 1..NO_MEALS loop
  77.         CHOPSTICK2.PICKUP;
  78.         CHOPSTICK3.PICKUP;
  79.         LENGTH_OF_MEAL := RANDOM(9) + 1;
  80.         PUT(" Barbie Liskov eating meal"); PUT(x:2);
  81.         PUT(" with chopsticks 2 and 3");
  82.         PUT(" for"); PUT(LENGTH_OF_MEAL:2:0); PUT(" seconds");
  83.         NEW_LINE;
  84.         delay LENGTH_OF_MEAL;
  85.         PUT(" Barbie Liskov done");
  86.         NEW_LINE;
  87.         CHOPSTICK2.PUTDOWN;
  88.         CHOPSTICK3.PUTDOWN;
  89.         delay 5.0;
  90.       end loop;
  91.       PUT(" Barbie Liskov burp");
  92.       NEW_LINE;
  93.     end LISKOV;
  94.  
  95.     task body SAMMET is
  96.         LENGTH_OF_MEAL: FLOAT;
  97.     begin
  98.         accept GIVE_BIRTH do
  99.           PUT("  Jeannie Sammet living and breathing");
  100.           NEW_LINE;
  101.         end GIVE_BIRTH;
  102.       for x in 1..NO_MEALS loop
  103.         CHOPSTICK3.PICKUP;
  104.         CHOPSTICK4.PICKUP;
  105.         LENGTH_OF_MEAL := RANDOM(9) + 1;
  106.         PUT("  Jeannie Sammet eating meal"); PUT(x:2);
  107.         PUT(" with chopsticks 3 and 4");
  108.         PUT(" for"); PUT(LENGTH_OF_MEAL:2:0); PUT(" seconds");
  109.         NEW_LINE;
  110.         delay LENGTH_OF_MEAL;
  111.         PUT("  Jeannie Sammet done");
  112.         NEW_LINE;
  113.         CHOPSTICK3.PUTDOWN;
  114.         CHOPSTICK4.PUTDOWN;
  115.         delay 5.0;
  116.       end loop;
  117.       PUT("  Jeannie Sammet burp");
  118.       NEW_LINE;
  119.     end SAMMET;
  120.  
  121.     task body GEHANI is
  122.         LENGTH_OF_MEAL : FLOAT;
  123.     begin
  124.         accept GIVE_BIRTH do
  125.           PUT("   Narain Gehani living and breathing");
  126.           NEW_LINE;
  127.         end GIVE_BIRTH;
  128.       for x in 1..NO_MEALS loop
  129.         CHOPSTICK1.PICKUP;
  130.         CHOPSTICK4.PICKUP;
  131.         LENGTH_OF_MEAL := RANDOM(9) + 1;
  132.         PUT("   Narain Gehani eating meal"); PUT(x:2);
  133.         PUT(" with chopsticks 1 and 4");
  134.         PUT(" for"); PUT(LENGTH_OF_MEAL:2:0); PUT(" seconds");
  135.         NEW_LINE;
  136.         delay LENGTH_OF_MEAL;
  137.         PUT("   Narain Gehani done");
  138.         NEW_LINE;
  139.         CHOPSTICK1.PUTDOWN;
  140.         CHOPSTICK4.PUTDOWN;
  141.         delay 5.0;
  142.       end loop;
  143.       PUT("   Narain Gehani burp");
  144.       NEW_LINE;
  145.     end GEHANI;
  146.  
  147.     task body CHOPSTICK1 is
  148.     begin
  149.       loop
  150.         select
  151.           accept PICKUP;
  152.           accept PUTDOWN;
  153.         or
  154.           terminate;
  155.         end select;
  156.       end loop;
  157.     end CHOPSTICK1;
  158.  
  159.     task body CHOPSTICK2 is
  160.     begin
  161.       loop
  162.         select
  163.           accept PICKUP;
  164.           accept PUTDOWN;
  165.          or
  166.           terminate;
  167.         end select;
  168.      end loop;
  169.     end CHOPSTICK2;
  170.  
  171.     task body CHOPSTICK3 is
  172.     begin
  173.       loop
  174.         select
  175.           accept PICKUP;
  176.           accept PUTDOWN;
  177.         or
  178.           terminate;
  179.         end select;
  180.       end loop;
  181.     end CHOPSTICK3;
  182.  
  183.     task body CHOPSTICK4 is
  184.     begin
  185.       loop
  186.         select
  187.           accept PICKUP;
  188.           accept PUTDOWN;
  189.         or
  190.           terminate;
  191.         end select;
  192.       end loop;
  193.     end CHOPSTICK4;
  194.  
  195. begin
  196.   DIJKSTRA.GIVE_BIRTH;
  197.   LISKOV.GIVE_BIRTH;
  198.   SAMMET.GIVE_BIRTH;
  199.   GEHANI.GIVE_BIRTH;
  200. end EAT;
  201.